/**
 * 平台检测工具
 * 提供获取当前运行平台和平台特性判断的功能
 */

// 平台信息缓存
let platformInfo = null

/**
 * 初始化平台信息
 * @returns {object} 平台信息对象
 */
export function initPlatform() {
  try {
    // 使用uni.getSystemInfoSync()获取真实的运行时平台信息
    const systemInfo = uni.getSystemInfoSync()
    console.log('系统信息:', systemInfo)

    // 通过uniPlatform字段判断当前运行平台
    const platform = systemInfo.uniPlatform
    console.log('当前运行平台:', platform)

    // 判断是否为微信小程序
    const isWeixinMP = platform === 'mp-weixin'

    // 缓存平台信息
    platformInfo = {
      platform: platform,
      isWeixinMP: isWeixinMP,
      systemInfo: systemInfo
    }

    console.log('平台判断结果 - 微信小程序:', isWeixinMP)
    console.log('平台详细信息:', {
      uniPlatform: platform,
      hostName: systemInfo.hostName,
      osName: systemInfo.osName,
      deviceType: systemInfo.deviceType
    })

    return platformInfo
  } catch (error) {
    console.error('获取平台信息失败:', error)
    
    // 降级处理：使用编译时条件判断
    let isWeixinMP = false
    
    // #ifdef MP-WEIXIN
    isWeixinMP = true
    // #endif
    // #ifndef MP-WEIXIN
    isWeixinMP = false
    // #endif
    
    // 缓存降级信息
    platformInfo = {
      platform: 'unknown',
      isWeixinMP: isWeixinMP,
      systemInfo: null,
      fallback: true
    }
    
    console.log('降级处理 - 微信小程序:', isWeixinMP)
    return platformInfo
  }
}

/**
 * 获取当前平台信息
 * @returns {object} 平台信息对象
 */
export function getPlatformInfo() {
  if (!platformInfo) {
    return initPlatform()
  }
  return platformInfo
}

/**
 * 获取当前运行平台
 * @returns {string} 平台标识
 */
export function getCurrentPlatform() {
  const info = getPlatformInfo()
  return info.platform
}

/**
 * 判断当前是否为微信小程序
 * @returns {boolean} 是微信小程序返回true，否则返回false
 */
export function isWeixinMiniProgram() {
  const info = getPlatformInfo()
  return info.isWeixinMP
}

/**
 * 判断当前是否为H5环境
 * @returns {boolean} 是H5环境返回true，否则返回false
 */
export function isH5() {
  const platform = getCurrentPlatform()
  return platform === 'h5'
}

/**
 * 判断当前是否为APP环境
 * @returns {boolean} 是APP环境返回true，否则返回false
 */
export function isApp() {
  const platform = getCurrentPlatform()
  return platform === 'app-plus'
}

/**
 * 判断当前是否为支付宝小程序
 * @returns {boolean} 是支付宝小程序返回true，否则返回false
 */
export function isAlipayMiniProgram() {
  const platform = getCurrentPlatform()
  return platform === 'mp-alipay'
}

/**
 * 判断当前是否为百度小程序
 * @returns {boolean} 是百度小程序返回true，否则返回false
 */
export function isBaiduMiniProgram() {
  const platform = getCurrentPlatform()
  return platform === 'mp-baidu'
}

/**
 * 判断当前是否为字节跳动小程序
 * @returns {boolean} 是字节跳动小程序返回true，否则返回false
 */
export function isToutiaeMiniProgram() {
  const platform = getCurrentPlatform()
  return platform === 'mp-toutiao'
}

/**
 * 判断当前是否为QQ小程序
 * @returns {boolean} 是QQ小程序返回true，否则返回false
 */
export function isQQMiniProgram() {
  const platform = getCurrentPlatform()
  return platform === 'mp-qq'
}

/**
 * 判断当前是否为小程序环境（任意小程序平台）
 * @returns {boolean} 是小程序环境返回true，否则返回false
 */
export function isMiniProgram() {
  return isWeixinMiniProgram() || 
         isAlipayMiniProgram() || 
         isBaiduMiniProgram() || 
         isToutiaeMiniProgram() || 
         isQQMiniProgram()
}

/**
 * 获取平台显示名称
 * @returns {string} 平台显示名称
 */
export function getPlatformDisplayName() {
  const platform = getCurrentPlatform()
  const platformNames = {
    'mp-weixin': '微信小程序',
    'mp-alipay': '支付宝小程序',
    'mp-baidu': '百度小程序',
    'mp-toutiao': '字节跳动小程序',
    'mp-qq': 'QQ小程序',
    'h5': 'H5网页',
    'app-plus': 'APP',
    'unknown': '未知平台'
  }
  return platformNames[platform] || '未知平台'
}

/**
 * 获取详细的平台信息
 * @returns {object} 详细平台信息
 */
export function getDetailedPlatformInfo() {
  const info = getPlatformInfo()
  return {
    platform: info.platform,
    displayName: getPlatformDisplayName(),
    isWeixinMP: info.isWeixinMP,
    isH5: isH5(),
    isApp: isApp(),
    isMiniProgram: isMiniProgram(),
    systemInfo: info.systemInfo,
    fallback: info.fallback || false
  }
}

/**
 * 打印平台信息到控制台
 */
export function logPlatformInfo() {
  const info = getDetailedPlatformInfo()
  console.log('=== 平台信息 ===')
  console.log('平台标识:', info.platform)
  console.log('平台名称:', info.displayName)
  console.log('是否微信小程序:', info.isWeixinMP)
  console.log('是否H5:', info.isH5)
  console.log('是否APP:', info.isApp)
  console.log('是否小程序:', info.isMiniProgram)
  console.log('是否降级处理:', info.fallback)
  if (info.systemInfo) {
    console.log('系统信息:', info.systemInfo)
  }
  console.log('===============')
}

// 自动初始化平台信息
initPlatform()
